package com.tarena.rocketmq.consumers;

import com.alibaba.fastjson.JSON;
import com.tarena.rocketmq.param.TeduUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.common.message.MessageExt;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;

/**
 * 消费TeduUser
 */
@Slf4j
@Component
@RocketMQMessageListener(topic = "user-topic01",consumerGroup = "user-consumer-group01")
public class MyUserConsumer implements RocketMQListener<TeduUser> {
    @Override public void onMessage(TeduUser message) {
        log.info("消费到的用户信息:{}",message);
    }
    /*
        如果指定的泛型类型是 消息体类型 底层监听器consumeMessage会帮助执行反序列化
        如果指定的泛型类型是MessageExt类型 底层监听器不会执行反序列化,直接将原始消息给你
     */
    /*@Override public void onMessage(MessageExt message) {
        //messageExt 包含了除了消息体以外的 消息所有内容
        //1. 消息id
        String id = message.getMsgId();
        log.info("消息id:{}",id);
        //2. 消息tag
        String tags = message.getTags();
        log.info("消息tag:{}",tags);
        //3. 消息key
        String keys = message.getKeys();
        log.info("消息key:{}",keys);
        //4. 消息来源 从哪个主题 哪个broker 哪个队列获取的
        String brokerName = message.getBrokerName();
        log.info("消息来源:{}",brokerName);
        String topic = message.getTopic();
        log.info("消息来源主题:{}",topic);
        int id1 = message.getQueueId();
        log.info("消息来源队列:{}",id1);
        //5. 消息体 byte数组 手动反序列化 生产者将TeduUser对象转化成JSON 再转成byte数组
        byte[] body = message.getBody();
        String json = new String(body);
        log.info("消息体:{}",json);
        TeduUser user = JSON.toJavaObject(JSON.parseObject(json), TeduUser.class);
        log.info("用户信息:{}",user);
    }*/
}
